<?php

class PlanosController extends Controller {

    const PACKAGE_VIEW = 'planos';

    /**
     * @var PlanoService
     */
    private $planoService;

    public function __construct() {
        $this->planoService = PlanoService::getInstance();
    }

    public function listarPlanos() {
        $this->save(SESSION_INTERFACE, 'PlanosList', $this->planoService->findAll());
        $this->view('listar_planos', self::PACKAGE_VIEW);
    }

    public function editarPlano() {
        $IDPlano = treatUrl('id');
        multipleEntities($IDPlano);
        $this->save(SESSION_INTERFACE, 'PlanoEdit', $this->planoService->findById($IDPlano));
        $this->view('editar', self::PACKAGE_VIEW);
    }

    public function atualizarPlano() {
        $ArDados = $_POST;
        if (empty($ArDados['StNome'])) {
            $this->saveReturn('O plano foi n&atilde;o com sucesso');
        } else if (empty($ArDados['IDPlano'])) {
            $this->saveReturn('O ID do plano não foi enviado corretamente');
        }
        if (!$this->hasReturn()) {
            multipleEntities($ArDados);
            if ($this->planoService->update($ArDados)) {
                $this->saveReturn('Plano atualizado com sucesso.', 1);
            } else {
                $this->saveReturn('Ocorreu um erro ao atualizar o Plano.');
            }
        }
        $this->showJsonResponse();
    }

    public function desativarPlano() {
        $ArDados = $_POST;
        multipleEntities($ArDados);

        if ( empty($ArDados['IDPlano']) ) {
            $this->saveReturn('O ID do plano não foi recebido');
        }

        if (!$this->hasReturn()) {
            if ($this->planoService->disable($ArDados['IDPlano'])) {
                $this->saveReturn('Plano desabilitado com sucesso!', 1);
            } else {
                $this->saveReturn('Ocorreu um erro ao desabilitar o plano!');
            }
        }

        $this->showJsonResponse();
    }

    public function ativarPlano() {
        $ArDados = $_POST;
        multipleEntities($ArDados);

        if ( empty($ArDados['IDPlano']) ) {
            $this->saveReturn('O ID do plano não foi recebido');
        }

        if (!$this->hasReturn()) {
            if ($this->planoService->enable($ArDados['IDPlano'])) {
                $this->saveReturn('Plano habilitado com sucesso!', 1);
            } else {
                $this->saveReturn('Ocorreu um erro ao habilitar o plano!');
            }
        }

        $this->showJsonResponse();
    }

    public function cadastrarPlanos() {
        $this->view('cadastrar', self::PACKAGE_VIEW);
    }

    public function inserirPlano() {
        if (empty($_POST['StNome'])) {
            $this->saveReturn('o campo Plano n&atilde;o foi recebido');
        } elseif (empty($_POST['FoPreco'])) {
            $this->saveReturn('O campo Preço n&atilde;o foi recebido');
        } else if (!isset($_POST['ItDesconto'])) {
            $this->saveReturn('O campo Desconto n&atilde;o foi recebido');
        }

        if (!$this->hasReturn()) {
            if ($this->planoService->save($_POST)) {
                $this->saveReturn('O Plano foi criado com sucesso!', 1);
            } else {
                $this->saveReturn('Ocorreu um erro ao criar o plano.');
            }
        }
        $this->showJsonResponse();
    }

    public function visualizarPlano() {
        $IDPlano = treatUrl('id');
        multipleEntities($IDPlano);

        $Plano = $this->planoService->findById($IDPlano);
        if (empty($Plano)) {
            return redirect('planos', 'listar-planos');
        }

        $this->save(SESSION_INTERFACE, 'Plan', $Plano);
        $this->view('visualizar_plano', self::PACKAGE_VIEW);
    }

}

?>
